@use "sass:map";
@use "sass:list";
// 加载配置文件
@use "config" as config;

// join var name
// joinVarName(('button', 'text-color')) => '--e-button-text-color'
@function joinVarName($list) {
  $name: "--" + config.$namespace;
  @each $item in $list {
    @if $item != "" {
      $name: $name + "-" + #{$item};
    }
  }
  @return $name;
}

// 当getCssVarName的第一个参数不是组件名称时，代表获取的是全局的变量名称，对应的变量在theme-chalk/src/var.scss样式表中
// getCssVarName('button', 'text-color') => '--e-button-text-color'
@function getCssVarName($args...) {
  @return joinVarName($args);
}

// getCssVar('button', 'text-color') => var(--e-button-text-color)
@function getCssVar($args...) {
	$value:'';
	$value: var(#{joinVarName($args)});
	@return $value;
	
	
  
}
// getNvueCssVar('button', 'text-color') => #fff
@function getNvueCssVar($args...) {
	$value:'';
	@if list.nth($args,1) == "color" {
		$colorType:list.nth($args,-1);
		@if list.index(config.$app-var-color-no-type-list,$colorType) == null {
			@if $colorType != "base" {
			  $args: list.append($args,"base")
			}
		}
		
	}
	$var:() !default;
	$var:map.merge(config.$app-var-map,$var);
	@each $item in $args {
		@if map.get($var,$item) == null {
		}
		
		$var:map.get($var,$item);
	}
	$value:$var;
	@return $value;
	
	
  
}

// bem('block', 'element', 'modifier') => 'e-block__element--modifier'
@function bem($block, $element: "", $modifier: "") {
  $name: config.$namespace + config.$common-separator + $block;

  @if $element != "" {
    $name: $name + config.$element-separator + $element;
  }

  @if $modifier != "" {
    $name: $name + config.$modifier-separator + $modifier;
  }

  @return $name;
}

// BEM命名规范所用到的函数
// 代码解析可看解析element-ui源码的相关文章，如https://cloud.tencent.com/developer/article/1198847

@function selectorToString($selector) {
  // inspect函数返回传入的变量对应的值
  $selector: inspect($selector);
  // str-slice函数用于截取字符串
  // 使用str-slice截取inspect函数获取到的值
  $selector: str-slice($selector, 2, -2);
  @return $selector;
}

@function containsModifier($selector) {
  // 调用selectorToString获取转换后的$selector
  $selector: selectorToString($selector);
  //判断$selector是否存在 '--'字符，是则代表$selector是modifier修饰符
  @if str-index($selector, config.$modifier-separator) {
    @return true;
  } @else {
    @return false;
  }
}

@function containWhenFlag($selector) {
  // 调用selectorToString获取转换后的$selector
  $selector: selectorToString($selector);
  //判断$selector是否存在 '.is-'字符，是则代表$selector是flag，如.is-show
  @if str-index($selector, "." + config.$state-prefix) {
    @return true;
  } @else {
    @return false;
  }
}

@function containPseudoClass($selector) {
  // 调用selectorToString获取转换后的$selector
  $selector: selectorToString($selector);
  //判断$selector是否存在 ':'字符，是则代表是$selector是伪类
  @if str-index($selector, ":") {
    @return true;
  } @else {
    @return false;
  }
}
// 判断$selector是否为修饰符、flag或伪类其中一项
@function hitAllSpecialNestRule($selector) {
  @return containsModifier($selector) or containWhenFlag($selector) or
    containPseudoClass($selector);
}
